package types

type CountReq struct {
	IsAll          string `json:"is_all" binding:"required"`
	ProjectId      uint64 `json:"project_id"`                          // 项目
	StepCategoryId uint64 `json:"step_category_id" binding:"required"` // 环节ID
	Month          string `json:"month"`                               // 当前时间
}

type CountRes struct {
	StandardCount    int64 `json:"standard_count"`
	NotStandardCount int64 `json:"not_standard_count"`
}

// DeliverReq 交付数量-请求参数
type DeliverReq struct {
	ProjectId      int64  `json:"project_id"`                                // 项目id筛选
	IsStandard     bool   `json:"is_standard"`                               // 是否标准任务
	Month          string `json:"month" binding:"datetime=2006-01"`          // 月份
	StepCategoryId int64  `json:"step_category_id" binding:"required,min=1"` // 环节id
}

// 环节投入数量-请求参数
type StepCategoryDevotedReq struct {
	ProjectId      int64  `json:"project_id"`  // 项目id筛选
	IsStandard     bool   `json:"is_standard"` // 是否标准任务
	IsAll          string `json:"is_all"`
	Month          string `json:"month" binding:"datetime=2006-01"`          // 月份
	StepCategoryId int64  `json:"step_category_id" binding:"required,min=1"` // 环节id
	FromTimestamp  int64
	ToTimestamp    int64
}

// CardInfoItemStruct
type CardInfoItemStruct struct {
	Name1 string `json:"name1"`
	Name2 string `json:"name2"`
	Num   int64  `json:"num"`
}

// CardInfo
type CardInfo struct {
	CardInfo interface{} `json:"card_info"`
	Column   interface{} `json:"column"`
}

// 交付数量-返回参数
type DeliverRes struct {
	Month         CardInfo `json:"month"`           // 本月
	NotMonth      CardInfo `json:"not_month"`       // 非本月
	MonthCount    int64    `json:"month_count"`     // 本月交付数量
	NotMonthCount int64    `json:"not_month_count"` // 非本月交付数量
}

type UserDepartmentTenantCount struct {
	UserId       uint64 `json:"user_id"`
	ProjectId    uint64 `json:"project_id"`
	DepartmentId uint64 `json:"department_id"`
	Count        uint64 `json:"count"`
	TenantId     uint64 `json:"tenant_id"`
}

// 环节投入数量-返回参数
type StepCategoryDevotedRes struct {
	Id                        int64    `json:"id"`
	Name                      string   `json:"name"`                          // 名称
	Role                      string   `json:"role"`                          // 角色信息
	Type                      string   `json:"type"`                          // 行类型
	UserId                    uint64   `json:"user_id"`                       // 用户id
	TenantId                  uint64   `json:"tenant_id"`                     // 租户id
	ParentId                  int64    `json:"parent_id"`                     // 父级id
	NotStartTaskCount         uint64   `json:"not_start_task_count"`          // 未开始任务数量
	IpTaskCount               uint64   `json:"ip_task_count"`                 // 进行中任务数量
	DoneTaskCount             uint64   `json:"done_task_count"`               // 已完成任务数量
	RepairCount               uint64   `json:"repair_count"`                  // 返修次数
	OverdueTaskCount          uint64   `json:"overdue_task_count"`            // 逾期次数
	OverdueTotalTimeTaskCount uint64   `json:"overdue_total_time_task_count"` // 逾期总时长
	ChildrenDepartmentIdList  []uint64 `json:"children_department_id_list"`
	ChildrenUserIdList        []uint64 `json:"children_user_id_list"`
}

type StepCategoryInvestmentRes struct {
	UserCount       int64                    `json:"user_count"`
	DepartmentCount int64                    `json:"department_count"`
	List            []StepCategoryDevotedRes `json:"list"`
}

type DepartmentRequiresCountList []StepCategoryDevotedRes

// 实现部门统计数据的排序
func (DL DepartmentRequiresCountList) Len() int { return len(DL) }
func (DL DepartmentRequiresCountList) Less(i, j int) bool {
	return (DL[i].IpTaskCount > DL[j].IpTaskCount) || (DL[i].IpTaskCount == DL[j].IpTaskCount)
}
func (DL DepartmentRequiresCountList) Swap(i, j int) { DL[i], DL[j] = DL[j], DL[i] }

type ScheduleTaskCountItemQuery struct {
	EntityGrade           string `json:"entity_grade"`
	EntityCategory        string `json:"entity_category"`
	PlanInsideNotStarted  int64  `json:"plan_inside_not_started"`
	PlanInsideInprogress  int64  `json:"plan_inside_inprogress"`
	PlanInsideDone        int64  `json:"plan_inside_done"`
	PlanInsideOverdue     int64  `json:"plan_inside_overdue"`
	PlanOutsideNotStarted int64  `json:"plan_outside_not_started"`
	PlanOutsideInprogress int64  `json:"plan_outside_inprogress"`
	PlanOutsideDone       int64  `json:"plan_outside_done"`
}

type ScheduleTaskCountReq struct {
	CurrentMonthDeliver string   `json:"current_month_deliver" binding:"required"`
	StepCategoryId      uint64   `json:"step_category_id" binding:"required"`
	TaskStatus          string   `json:"task_status" binding:"required"`
	MonthTime           string   `json:"month_time"`         // 月份
	Category            []string `json:"category"`           // 类型
	Grade               []string `json:"grade"`              // 等级
	DepartmentId        []uint64 `json:"department_id"`      // 部门ID
	Executor            []uint64 `json:"executor"`           // 执行人ID
	ExecutorTenantId    []uint64 `json:"executor_tenant_id"` // 处理租户ID
}

type ScheduleTaskCountRes struct {
	Type      string `json:"type"`       // 类型
	TaskCount uint64 `json:"task_count"` // 任务数量
}

type ScheduleStatusTaskCountReq struct {
	StandardCase        string   `json:"standard_case" binding:"required"`
	TaskStatus          string   `json:"task_status" binding:"required"`
	StatusFilter        string   `json:"status_filter"`
	CurrentMonthDeliver string   `json:"current_month_deliver" binding:"required"`
	StepCategoryId      uint64   `json:"step_category_id" binding:"required"`
	MonthTime           string   `json:"month_time"`         // 月份
	Category            []string `json:"category"`           // 类型
	Grade               []string `json:"grade"`              // 等级
	DepartmentId        []uint64 `json:"department_id"`      // 部门ID
	Executor            []uint64 `json:"executor"`           // 执行人ID
	ExecutorTenantId    []uint64 `json:"executor_tenant_id"` // 处理租户ID
}

type ScheduleStatusTaskCountRes struct {
	ProjectId   uint64 `json:"project_id"`   // 项目
	ProjectType string `json:"project_type"` // 项目名称
	ProjectName string `json:"project_name"` // 项目名称
	TaskCount   uint64 `json:"task_count"`   // 任务数量
}

type Column struct {
	Name     string `json:"name"`
	Code     string `json:"code"`
	TotalNum int64  `json:"total_num"`
}

type ScheduleNonStandardProjectTaskCompletionCountReq struct {
	IsAll          string `json:"is_all" binding:"required"`
	ProjectId      uint64 `json:"project_id"`                          // 项目
	StepCategoryId uint64 `json:"step_category_id" binding:"required"` // 环节ID
	CurrentTime    string `json:"current_time"`                        // 当前时间
}

type ScheduleNonStandardProjectTaskCompletionCountRes struct {
	CurrentMonthCompletion         []CompletionItem `json:"current_month_completion"`
	CountCurrentMonthCompletion    int64            `json:"count_current_month_completion"`
	NotCurrentMonthCompletion      []CompletionItem `json:"not_current_month_completion"`
	CountNotCurrentMonthCompletion int64            `json:"count_not_current_month_completion"`
}

type CompletionItemQuery struct {
	CurrentMontCompleted    int64 `json:"current_mont_completed"`
	CurrentMonthUndone      int64 `json:"current_month_undone"`
	NotCurrentMontCompleted int64 `json:"not_current_mont_completed"`
	NotCurrentMonthUndone   int64 `json:"not_current_month_undone"`
}

type CompletionItem struct {
	Code  string `json:"code"`
	Count int64  `json:"count"`
}

type TaskMemberItem struct {
	UserId   uint64 `json:"user_id"`
	UserName string `json:"user_name"`
	TaskId   uint64 `json:"task_id"`
	Avatar   string `json:"avatar"`
}

type ScheduleNonStandardTaskMemberCountReq struct {
	IsAll          string `json:"is_all" binding:"required"`
	ProjectId      uint64 `json:"project_id"`                          // 项目
	StepCategoryId uint64 `json:"step_category_id" binding:"required"` // 环节ID
	Page           []int  `json:"page" binding:"required"`             // 分页
}

type ScheduleNonStandardTaskMemberCountRes struct {
	UserId   uint64 `json:"user_id"`
	TaskSum  int    `json:"task_sum"`
	UserName string `json:"user_name" gorm:"-"`
}

type ScheduleNonStandardTaskListRes struct {
	PlanId        uint64           `json:"plan_id"`
	TaskId        uint64           `json:"task_id"`
	EntityId      uint64           `json:"entity_id"`
	TaskName      string           `json:"task_name"`
	ProjectName   string           `json:"project_name"`
	EpisodeName   string           `json:"episode_name"`
	StartTime     int              `json:"start_time"`
	EndTime       int              `json:"end_time"`
	Partner       []TaskMemberItem `json:"partner" gorm:"-"`
	CreatedBy     uint64           `json:"created_by"`
	CreatedByName string           `json:"created_by_name"`
	StepCategory  string           `json:"step_category"`
}

type ScheduleNonStandardTaskListReq struct {
	CurrentMonthDeliver string `json:"current_month_deliver" binding:"required"` // 是否非当月
	CurrentTime         string `json:"current_time"`
	Completion          string `json:"completion" binding:"required"`       // 完成情况
	ProjectId           uint64 `json:"project_id" binding:"required"`       // 项目
	StepCategoryId      uint64 `json:"step_category_id" binding:"required"` // 环节ID
	Page                []int  `json:"page" binding:"required"`             // 分页
}

// NonStandardStepCategoryDevotedRes 非标准环节任务投入数量
type NonStandardStepCategoryDevotedRes struct {
	Id                       uint64 `json:"id"`
	Name                     string `json:"name"`                         // 名称
	Role                     string `json:"role"`                         // 角色信息
	Type                     string `json:"type"`                         // 行类型
	UserId                   uint64 `json:"user_id"`                      // 用户id
	TenantId                 uint64 `json:"tenant_id"`                    // 租户id
	ParentId                 uint64 `json:"parent_id"`                    // 父级id
	NonStandardTaskCount     uint64 `json:"non_standard_task_count"`      // 非本月和本月统计
	CurrentMonthTaskCount    uint64 `json:"current_month_task_count"`     // 本月统计
	NotCurrentMonthTaskCount uint64 `json:"not_current_month_task_count"` // 非本月统计
}

type CountNonStandardStepCategoryDevotedRes struct {
	PeopleCount int64                               `json:"people_count"`
	List        []NonStandardStepCategoryDevotedRes `json:"list"`
}

type OutsideExecuteTaskCountRes struct {
	TenantId         int64 `json:"tenant_id"`
	NotStartNumber   int64 `json:"not_start_number"`
	InProgressNumber int64 `json:"in_progress_number"`
	DoneNumber       int64 `json:"done_number"`
}

type TenantCount struct {
	TenantId int64 `json:"tenant_id"`
	Number   int64 `json:"number"`
}
